package org.qqcui.designpattern.principles.lsp;


/**
 * 里氏替换原则示例一，违反了里氏替换原则的示例
 * 子类在无意中复写了父类中的方法，导致在调用的过程中出现问题
 *
 * @author cuiqingqiang
 * @version 1.0
 * @date 2020-10-13 22:56
 **/
public class LisKov1 {
	public static void main(String[] args) {

		A a = new A();
		System.out.println("11-3=" + a.fun1(11, 3));

		A b = new B();
		System.out.println("11-3=" + b.fun1(11, 3));
	}
}

class A {
	/**
	 * 计算两个数的差
	 * @param a 被减数
	 * @param b 减数
	 * @return 两个数的差
	 */
	public int fun1(int a, int b) {
		return a - b;
	}
}

/**
 * B类继承了A
 * 增加了一个新功能：完成连个数相加，然后与9求和
 */
class B extends A {

	/**
	 * 子类无意中复写了父类的方法，导致在进行替换的时候，逻辑出错
	 * 计算两个数的和
	 * @param a 加数1
	 * @param b 加数2
	 * @return 两个数的和
	 */
	@Override
	public int fun1(int a, int b) {
		return a + b;
	}

	public int fun2(int a, int b) {
		return fun1(a, b) + 9;
	}
}
